package com.yang.controller;

import com.yang.dto.req.AdminLoginReqDTO;
import com.yang.dto.resp.AdminLoginRespDTO;
import com.yang.result.Result;
import com.yang.service.AdminService;
import com.yang.utils.JwtUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 管理员控制层
 * 作者：孤城暖阳y
 * 开发时间：2025-02-26
 */
@RestController
@RequiredArgsConstructor
@Tag(name = "管理员操作")
public class AdminController {

    private final AdminService adminService;
    private final StringRedisTemplate redisTemplate;

    @Operation(summary = "管理员登录")
    @PostMapping("/Treasure-Pavilion-admin/admin/login")
    public Result login(AdminLoginReqDTO requestParam) {
        AdminLoginRespDTO login = adminService.login(requestParam);
        System.out.println(login);
        if (login != null) {
            // 生成 JWT Token
            Map<String, Object> claims = new HashMap<>();
            claims.put("adminId", login.getId());
            String token = JwtUtil.genToken(claims);

            // 将 Token 存入 Redis（示例存储 7 天）
            redisTemplate.opsForValue().set("admin:token:" + login.getId(),
                    token,
                    7,
                    TimeUnit.DAYS);

            // 将 Token 返回给前端
            login.setToken(token);  // 需在 AdminLoginRespDTO 中添加 token 字段
            return Result.success(login);
        } else {
            return Result.error("登录失败");
        }
    }
}
